home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / ckhelper.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  6KB  |  198 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. /*
  38.  * ckhelper.h
  39.  *
  40.  * This file contains some helper utilities for interaction with cryptoki.
  41.  */
  42.  
  43. #ifndef CKHELPER_H
  44. #define CKHELPER_H
  45.  
  46. #ifdef DEBUG
  47. static const char CKHELPER_CVS_ID[] = "@(#) $RCSfile: ckhelper.h,v $ $Revision: 1.19 $ $Date: 2005/01/20 02:25:47 $";
  48. #endif /* DEBUG */
  49.  
  50. #ifndef NSSCKT_H
  51. #include "nssckt.h"
  52. #endif /* NSSCKT_H */
  53.  
  54. PR_BEGIN_EXTERN_C
  55.  
  56. /* Some globals to keep from constantly redeclaring common cryptoki
  57.  * attribute types on the stack.
  58.  */
  59.  
  60. /* Boolean values */
  61. NSS_EXTERN_DATA const NSSItem g_ck_true;
  62. NSS_EXTERN_DATA const NSSItem g_ck_false;
  63.  
  64. /* Object classes */
  65. NSS_EXTERN_DATA const NSSItem g_ck_class_cert;
  66. NSS_EXTERN_DATA const NSSItem g_ck_class_pubkey;
  67. NSS_EXTERN_DATA const NSSItem g_ck_class_privkey;
  68.  
  69. #define NSS_CK_TEMPLATE_START(_template, attr, size)   \
  70.     attr = _template;                                  \
  71.     size = 0;
  72.  
  73. #define NSS_CK_SET_ATTRIBUTE_ITEM(pattr, kind, item)  \
  74.     (pattr)->type = kind;                             \
  75.     (pattr)->pValue = (CK_VOID_PTR)(item)->data;      \
  76.     (pattr)->ulValueLen = (CK_ULONG)(item)->size;     \
  77.     (pattr)++;
  78.  
  79. #define NSS_CK_SET_ATTRIBUTE_UTF8(pattr, kind, utf8)  \
  80.     (pattr)->type = kind;                             \
  81.     (pattr)->pValue = (CK_VOID_PTR)utf8;              \
  82.     (pattr)->ulValueLen = (CK_ULONG)nssUTF8_Size(utf8, NULL); \
  83.     if ((pattr)->ulValueLen) ((pattr)->ulValueLen)--; \
  84.     (pattr)++;
  85.  
  86. #define NSS_CK_SET_ATTRIBUTE_VAR(pattr, kind, var)    \
  87.     (pattr)->type = kind;                             \
  88.     (pattr)->pValue = (CK_VOID_PTR)&var;              \
  89.     (pattr)->ulValueLen = (CK_ULONG)sizeof(var);      \
  90.     (pattr)++;
  91.  
  92. #define NSS_CK_SET_ATTRIBUTE_NULL(pattr, kind)        \
  93.     (pattr)->type = kind;                             \
  94.     (pattr)->pValue = (CK_VOID_PTR)NULL;              \
  95.     (pattr)->ulValueLen = 0;                          \
  96.     (pattr)++;
  97.  
  98. #define NSS_CK_TEMPLATE_FINISH(_template, attr, size) \
  99.     size = (attr) - (_template);                      \
  100.     PR_ASSERT(size <= sizeof(_template)/sizeof(_template[0]));
  101.  
  102. /* NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)
  103.  *
  104.  * Convert a CK_ATTRIBUTE to an NSSItem.
  105.  */
  106. #define NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)         \
  107.     if ((CK_LONG)(attrib)->ulValueLen > 0) {           \
  108.     (item)->data = (void *)(attrib)->pValue;       \
  109.     (item)->size = (PRUint32)(attrib)->ulValueLen; \
  110.     } else {                                           \
  111.     (item)->data = 0;                              \
  112.     (item)->size = 0;                              \
  113.     }
  114.  
  115. #define NSS_CK_ATTRIBUTE_TO_BOOL(attrib, boolvar)        \
  116.     if ((attrib)->ulValueLen > 0) {                      \
  117.     if (*((CK_BBOOL*)(attrib)->pValue) == CK_TRUE) { \
  118.         boolvar = PR_TRUE;                           \
  119.     } else {                                         \
  120.         boolvar = PR_FALSE;                          \
  121.     }                                                \
  122.     }
  123.  
  124. #define NSS_CK_ATTRIBUTE_TO_ULONG(attrib, ulongvar)      \
  125.     if ((attrib)->ulValueLen > 0) {                      \
  126.     ulongvar = *((CK_ULONG*)(attrib)->pValue);       \
  127.     }
  128.  
  129. /* NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str)
  130.  *
  131.  * Convert a CK_ATTRIBUTE to a string.
  132.  */
  133. #define NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str)      \
  134.     str = (NSSUTF8 *)((attrib)->pValue);
  135.  
  136. /* NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)
  137.  *
  138.  * Convert an NSSItem to a  CK_ATTRIBUTE.
  139.  */
  140. #define NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)     \
  141.     (attrib)->pValue = (CK_VOID_PTR)(item)->data;  \
  142.     (attrib)->ulValueLen = (CK_ULONG)(item)->size; \
  143.  
  144. /* Get an array of attributes from an object. */
  145. NSS_EXTERN PRStatus 
  146. nssCKObject_GetAttributes
  147. (
  148.   CK_OBJECT_HANDLE object,
  149.   CK_ATTRIBUTE_PTR obj_template,
  150.   CK_ULONG count,
  151.   NSSArena *arenaOpt,
  152.   nssSession *session,
  153.   NSSSlot *slot
  154. );
  155.  
  156. /* Get a single attribute as an item. */
  157. NSS_EXTERN PRStatus
  158. nssCKObject_GetAttributeItem
  159. (
  160.   CK_OBJECT_HANDLE object,
  161.   CK_ATTRIBUTE_TYPE attribute,
  162.   NSSArena *arenaOpt,
  163.   nssSession *session,
  164.   NSSSlot *slot,
  165.   NSSItem *rvItem
  166. );
  167.  
  168. NSS_EXTERN PRBool
  169. nssCKObject_IsAttributeTrue
  170. (
  171.   CK_OBJECT_HANDLE object,
  172.   CK_ATTRIBUTE_TYPE attribute,
  173.   nssSession *session,
  174.   NSSSlot *slot,
  175.   PRStatus *rvStatus
  176. );
  177.  
  178. NSS_EXTERN PRStatus 
  179. nssCKObject_SetAttributes
  180. (
  181.   CK_OBJECT_HANDLE object,
  182.   CK_ATTRIBUTE_PTR obj_template,
  183.   CK_ULONG count,
  184.   nssSession *session,
  185.   NSSSlot  *slot
  186. );
  187.  
  188. NSS_EXTERN PRBool
  189. nssCKObject_IsTokenObjectTemplate
  190. (
  191.   CK_ATTRIBUTE_PTR objectTemplate, 
  192.   CK_ULONG otsize
  193. );
  194.  
  195. PR_END_EXTERN_C
  196.  
  197. #endif /* CKHELPER_H */
  198.